#ifndef TEXTURE_H
#define TEXTURE_H

#include "Couleur.h"
#include "Point.h"
#include "Vecteur.h"
#include "Matrice.h"

class Texture{
	protected:
		char* fichier;
		int typeMapping;

		Couleur *tabCouleur;

		int chargerFichier();
		void getCoordMappingPlanaire(const Point &, int&, int&);
		void getCoordMappingCylindrique(const Point &, int&, int&);
		void getCoordMappingSpherique(const Point &, int&, int&);

		double decalageX, decalageY;
		Vecteur vecteurDirection;
		Vecteur vecteurOrientation;
		double coeffTexture;

		Matrice changementRepere;

		bool repetition;

		int Bites;       
		unsigned char HeaderFile [0x0E]; 
		unsigned char HeaderBMP [0x29];

		unsigned long largeur;  
		unsigned long hauteur;

	public :

		static const int MAPPING_PLANAIRE = 0;
		static const int MAPPING_CYLINDRIQUE = 1;
		static const int MAPPING_SPHERIQUE = 2;

		Texture();
		Texture(char*, int, double, double, Vecteur&, Vecteur&, double, bool repet=true);
		Texture (Texture &, Vecteur &);

		Vecteur getDir() {return vecteurDirection;}
		void setDir(Vecteur &d){vecteurDirection=d; changementRepere = Matrice (Point(0,0,0), vecteurDirection, vecteurOrientation);}
              
		int getTypeMapping() const { return typeMapping; }
		Couleur getCouleur(int i, int j) const {return tabCouleur[i*hauteur+j];}
		Couleur getCouleurMapping(const Point &p);
		Couleur getCouleurMapping(int x, int y);
		Vecteur getDirection() const { return vecteurDirection; }
		Vecteur getOrientation() const { return vecteurOrientation; }
		void printName() { printf("%d - %s\n",typeMapping,fichier); }

		void getCoordonneesMapping(const Point &, int &, int &);
};

#endif
